package lineartable.arraylist;

import lineartable.inter.LinearList;

/**
 * 线性表的顺序存储结构
 */
public class SequentialList implements LinearList {
    // 数组的长度
    private int length = 255;
    // 数组
    private char[] arr;
    // 存储数据的个数
    private int listLength = 0;

    /**
     * 返回线性表是否为空
     *
     * @return
     */
    @Override
    public boolean listEmpty() {
        return listLength <= 0;
    }

    /**
     * 将线性表清空
     */
    @Override
    public void clearList() {
        listLength = 0;
        arr = new char[length];
    }

    /**
     * 返回线性表中第i个位置的元素
     *
     * @param index
     * @return
     */
    @Override
    public char getElem(int index) {
        return arr[index];
    }

    /**
     * 查找线性表中的元素，并返回下标
     *
     * @param e
     * @return
     */
    @Override
    public int locateElem(char e) {
        for (int i = 0; i < listLength; i++) {
            if (arr[i] == e) {
                return i;
            }
        }
        return -1;
    }

    /**
     * 在线性表的第i个位置插入元素e
     *
     * @param i
     * @param e
     * @return
     */
    @Override
    public void listInsert(int i, char e) {
        if (listLength > 0) {
            for (int j = listLength; j >= 0; j--) {
                if (j > i) {
                    arr[j] = arr[j - 1];
                } else if (j == i) {
                    arr[j] = e;
                    break;
                }
            }
        } else {
            arr[0] = e;
        }
        listLength++;
    }

    /**
     * 删除链表中的第i个元素
     *
     * @param i
     */
    @Override
    public void listDelete(int i) {
        for (int j = i; j < listLength - 1; j++) {
            arr[j] = arr[j + 1];
        }
        listLength--;
    }

    /**
     * 返回线性表中元素个数
     *
     * @return
     */
    @Override
    public int getListLength() {
        return listLength;
    }

    /**
     * 构造函数，初始线性表
     */
    public SequentialList() {
        arr = new char[length];
    }


    @Override
    public String toString() {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("[");
        for (int i = 0; i < listLength; i++) {
            stringBuilder.append(arr[i] + ",");
        }
        stringBuilder.deleteCharAt(stringBuilder.length() - 1);
        stringBuilder.append("]");
        return stringBuilder.toString();
    }
}
